package net.lulihu.pangolin.headless.common.container.templet;

import net.lulihu.pangolin.headless.common.container.exception.BeanClassExistException;
import net.lulihu.pangolin.headless.common.container.exception.BeanNotExistException;

/**
 * 对象容器
 */
public interface BeanContainer {

    /**
     * 添加对象到容器中
     *
     * @param bean 对象
     */
    void addBean(Object bean) throws BeanClassExistException;

    /**
     * 添加对象到容器中
     *
     * @param beanClass 对象类型
     * @param bean      对象
     */
    void addBean(Class<?> beanClass, Object bean) throws BeanClassExistException;


    /**
     * 从容器中获取对象
     *
     * @param beanClass 对象类型
     * @return 指定类型对象
     */
    <T> T getBean(Class<?> beanClass) throws BeanNotExistException;

    /**
     * 判断容器是否保存该对象类型
     *
     * @param beanClass 对象类型
     * @return true存在反之不存在
     */
    boolean contains(Class<?> beanClass);
}
